/**
 * 给定01数组，求最长连续子段，满足01数量相等
 * 用前缀和，+1-1，则和相等的区间01数量相等
 * 对每个和值，记录出现的最早和最晚位置即可得到答案
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>

using llt = long long;
using vi = vector<int>;


int N;
vi A;

int proc(){
    vector<int> s(N + 1, 0);
    for(int i=1;i<=N;++i) s[i] = (1 == A[i - 1] ? 1 : -1) + s[i - 1];
    map<int, vi> pos;
    for(int i=0;i<=N;++i) pos[s[i]].push_back(i);
    int ans = 0;
    for(const auto & p : pos){
        if(p.second.size() >= 2){
            ans = max(ans, p.second.back() - p.second.front());
        }
    }
    return ans;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> N;
    A.assign(N, 0);
    for(auto & i : A) cin >> i;
    cout << proc() << endl;
    return 0;
}